package com.fps.webshop.question.question0001_0099;

/**
 * 3. 无重复字符的最长子串
 * 
 * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。
 * 
 * 示例 1:
 * 输入: s = "abcabcbb"
 * 输出: 3 
 * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 * 
 * 示例 2:
 * 输入: s = "bbbbb"
 * 输出: 1
 * 解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
 * 
 * 示例 3:
 * 输入: s = "pwwkew"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
     请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
 * 
 * 示例 4:
 * 输入: s = ""
 * 输出: 0
 * 
 * 提示：
 * 		0 <= s.length <= 5 * 104
 * 		s 由英文字母、数字、符号和空格组成
 *
 */
public class Question003 {
	
	/**
	 * 第一次提交，急需优化。因为大量使用了字符串的遍历查询方法，及其耗时
	 * 提交结果	执行用时	内存消耗	语言		提交时间				备注
	 * 通过		15 ms	39.1 MB	Java	2021/08/04 16:09
	 */
	public static int lengthOfLongestSubstring(String s) {
		/*
		 * if("".equals(s)) { return 1; }
		 */
		String key="";
		int count = 0;
		for(char ss : s.toCharArray()) {
			if(!key.contains(ss+"")) {
				key = key+ss;
			}else {
				if(key.length()>count) {
					count = key.length();
				}
				key = key.substring(key.indexOf(ss+"")+1, key.length());
				key = key+ss;
			}
		}
		if(key.length()>count) {
			count = key.length();
		}
		return count;
    }
	public static void main(String[] args) {
		String s = "pwwkew";
		System.out.print(lengthOfLongestSubstring(s));
	}
}
